<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    var list = [1,4,7,2,5,8,3,6,9];

    // var sum = 0;
    // list.forEach(function(item,index,array){
    //     console.log(item,index,array);
    //     sum += item; // 1
    // })
    // console.log(sum);

    // reduce(callback,initVal)    数组归并
    // callback(prev,item,index,array)  => 回调函数,每次循环时执行, 有四个参数
    // prev => 1. 接收initValue作为初始值  2. 每次回调函数执行完毕,将函数的返回值作为下次循环的初始值传入
    // item 循环的当前元素
    // index 循环的当前下标
    // array 原数组

    // initVal  => 传入一个值 作为prev的初始值

    // 注意: 如果不设置initVal , 默认将数组的第一个元素作为初始值, 从数组的第二个元素开始遍历

    // var result = list.reduce(function(prev,item,index,array){
    //     console.log(prev,item,index,array);
    //     // console.log(prev); // 0
    //     return prev + item; //  1
    // },0)

    // var result = list.reduce(function(prev,item,index,array){
    //     console.log(prev,item,index,array);
    //     // console.log(prev); // 0
    //     return prev + item; //  1
    // })
    // console.log(result);


    // reduce初始值不一定非要是一个数值, 也可以是其他类型 -> 重要的是prev可以贯穿整个循环
    var result = list.reduce(function(prev,item,index,array){
        console.log(prev,item,index,array);
        prev.push(item);
        return prev; //  1
    },[])
    console.log(result);




</script>
</html>